package com.example.demo.demo.collection;

import java.util.ArrayList;
import java.util.List;

/**
 * @author: htc
 * @date: Created in 18:21 2018/9/5.
 */
public class ArrayListTest {
    public static void ArrayListTest() {
        List list = new ArrayList<>();
        System.out.println(list.size());
        System.out.println(2 >> 1);
        for (int i = 0; i < 10; i++) {
            list.add(1);
        }
        list.add(2);
    }

    public static void main(String[] args) {
        equalTest();
    }

    public static void finalTest() {
        String a = "hello";
        final String b = "hello";
        String c = "hello2";

        String d = a + 2;
        String e = b + 2;
        System.out.println(d == c);
        System.out.println(e == c);
    }

    /**
     * == 号在比较基本数据类型时比较的是值，而用 == 号比较两个对象时比较的是两个对象的地址值
     * equals默认效果和==一样，但是绝大部分对象会重写equals方法
     */
    public static void equalTest() {
        int x = 10;
        int y = 10;
        System.out.println(x == y); // 比较的是值 输出true

        String str1 = new String("abc");
        String str2 = new String("abc");
        System.out.println(str1 == str2); // 比较的是两个对象的地址 输出false

        System.out.println( " ----------- ---------- ---------");

        /**
         *  这里其实是进行封包， 在封包的过程中其实就是调用了Integer.valueOf()方法把int基本类型转换成了Integer对象
         * 在valueOf方法中对i进行了判断，如果在[-128,127]之间会从缓存中取出相应的Integer对象，而不是重新new一个Integer对象
         */
        Integer j = 10;//此处等价于Integer j = Integer.valueOf(10);
        Integer k = 10;
        System.out.println(x == j);// Integer和int类型之间的比较，将Integer拆箱成int类型，将内存中的数值进行比较 比较的是大小  所以这里输出的是 true


        Integer e = 128;
        Integer f = 128;
        System.out.println(j == k);
        System.out.println(e == f); //[-128 ,127]，超过此范围的数值JVM都会开辟新内存，比较的就是对象地址   所以这里输出的是 false
    }
}
